//1 声明变量用来缓存组件对象
var permissionDatagrid, permissionDialog, permissionDialogForm, searchAdvanceForm, searchAdvanceDialog, roleDatagrid, roleDialog, roleDialogForm, showPermissionDatagrid, appendRowDatagrid, paramList;
$(function () {
  //2 使用声明的变量来缓存组件
  permissionDatagrid = $("#permissionDatagrid");
  permissionDialog = $("#permissionDialog");
  permissionDialogForm = $("#permissionDialogForm");
  searchAdvanceForm = $("#searchAdvanceForm");
  searchAdvanceDialog = $("#searchAdvanceDialog");
  paramList = [];
  roleDatagrid = $("#roleDatagrid");
  roleDialog = $("#roleDialog");
  roleDialogForm = $("#roleDialogForm");
  showPermissionDatagrid = $("#showPermissionDatagrid");
  appendRowDatagrid = $("#appendRowDatagrid");

  //3 创建一个命令对象，存放所有的按钮的点击事件的回调
  cmdObj_2 = {
    permissionAdd: function () {
      //清空表单
      permissionDialogForm.form("clear");
      //居中，设置标题，打开
      permissionDialog.dialog('center').dialog('setTitle', '添加').dialog('open');
    },
    permissionEdit: function () {
      //获取选中的行
      var row = permissionDatagrid.datagrid('getSelected');
      //console.debug(row);
      if (!row) {
        $.messager.alert("提示", "请选中数据修改", "info");
        return;
      }
      //清空表单
      permissionDialogForm.form("reset");
      //把数据回显到表单中
      permissionDialogForm.form('load', row);
      //手动回显状态
      if (row.state == 1) {
        $("#State").combobox('setValue', '正常');
      }
      if (row.state == -1) {
        $("#State").combobox('setValue', '停用');
      }
      //居中，设置标题，打开
      permissionDialog.dialog('center').dialog('setTitle', '修改').dialog('open');
    },
    permissionRefresh: function () {
      permissionDatagrid.datagrid('reload');
    },
    permissionSave: function () {
      $(permissionDialogForm).form('submit', {
        url: 'permission/save',
        onSubmit: function () {
          // do some check
          // validate none 做表单字段验证，当所有字段都有效的时候返回true。该方法使用validatebox(验证框)插件。
          return permissionDialogForm.form('validate');
        },
        success: function (data) {
          //alert(data);
          // data是一个json格式的字符串，我们用自定义方法将它转成需要的东西
          var result = $.parseJSON(data);
          //console.debug(result);
          if (result.success) {
            //关闭模态框
            permissionDialog.dialog('close');
            //给出成功提示
            $.messager.alert("提示", "保存成功", "info");
            //刷新数据表格
            permissionDatagrid.datagrid('reload');
          } else {
            //失败给出提示
            $.messager.alert("提示", "保存失败", "错误：" + result.errorCode + "    " + result.message);
          }

        }
      });
    },
    permissionCancel: function () {
      permissionDialog.dialog('close');
    },
    permissionChange: function () {
      //获取选中的行
      var row = permissionDatagrid.datagrid('getSelected');
      if (!row) {
        $.messager.alert("提示", "请选择数据", "info");
      }
      $.post("permission/change", row, function (data) {
        if (data.success) {
          $.messager.alert("提示", "修改成功", "info");
          //重新加载
          permissionDatagrid.datagrid("reload");
        }
      })
    },
    permissionDelete:function () {
      var row = permissionDatagrid.datagrid("getSelected");
      if (!row) {
        $.messager.alert("提示", "请选中一行数据删除", "error");
        return;
      }
      //提示是否删除
      $.messager.confirm("提示", "确认删除吗", function (r) {
        if (r) {
          //发送ajax请求删除
          $.get("permission/delete", {id: row.id}, function (result) {
            if (result.success) {
              //成功
              $.messager.alert("提示", "删除成功", "info");
              //刷新表格
              permissionDatagrid.datagrid("reload");
            } else {
              //给出失败的提示
              $.messager.alert("提示", result.message, "error");
            }
          })
        }
      })

    },
    search: function () {
      var param = $("#searchForm").serializeJSON();
      // 普通方法 serialize()  得到：q=ddd&state=0
      //console.debug(param);
      //发现格式并不满足我们得要求，所以自定义了方法serializeJSON
      //直接怼到表格上去
      permissionDatagrid.datagrid("load", param);
    },
    //高级查询按钮
    searchAdvance: function () {
      //清空form表单
      searchAdvanceForm.form("reset");
      // alert(111);
      //打开高级查询模态框
      searchAdvanceDialog.dialog("open");
    },
    searchCancel: function () {

    },
    roleAdd: function () {
      //清空表单
      roleDialogForm.form("clear");
      //重新加载追加数据表格，否则还有上次选择的
      appendRowDatagrid.datagrid("loadData", {total: 0, rows: []});
      //居中，设置标题，打开
      roleDialog.dialog('center').dialog('setTitle', '添加').dialog('open');
    },
    roleEdit: function () {
      //获取选中的行
      var row = roleDatagrid.datagrid('getSelected');
      //console.debug(row);
      if (!row) {
        $.messager.alert("提示", "请选中数据修改", "info");
        return;
      }
      //清空表单
      roleDialogForm.form("clear");
      //把数据回显到表单中
      roleDialogForm.form('load', {
        roleName:row.name,
        roleId:row.id
      });
      //居中，设置标题，打开
      roleDialog.dialog('center').dialog('setTitle', '修改').dialog('open');
      //将row中的permissions数组克隆一份到本地
      var permissions = arrClone(row.permissions);
      //回显已选权限
      appendRowDatagrid.datagrid("loadData", {total: permissions.length, rows: permissions})
    },
    //刷新按钮
    roleRefresh: function () {
      roleDatagrid.datagrid('reload');
    },
    //删除按钮
    roleDelete: function () {
      //用得是getSelections方法
      var row = roleDatagrid.datagrid('getSelections');
      //console.debug(row);
      if (row.length == 0) {
        $.messager.alert("提示", "请选中一条数据然后删除", "info");
        return;
      }
      if (row) {
        $.messager.confirm("确认对话框", "确定删除吗", function (r) {
          if (r) {
            $.post("role/delete", {"id": row[0].id}, function (result) {
              $.messager.alert("提示", "删除成功", "info");
              roleDatagrid.datagrid('reload');
            })
          } else {
            $.messager.alert("info", "失败原因" + result.message, "error");
          }
        })
      }

    },
    //工具栏按钮
    roleSave: function () {
      var rowDatas = appendRowDatagrid.datagrid("getRows");
      var a = {
        "id": $('input[name=roleId]').val(),
        "name": $('input[name=roleName]').val(),
        "permissions": []
      };

      for (var i = 0; i < rowDatas.length; i++) {
        a.permissions.push({"id": rowDatas[i].id})
      }
      // console.log(a);
      // $.post("role/save", a, "json");
      $.ajax({
          method: "POST",
          url: "role/save",
          contentType: 'application/json',
          data: JSON.stringify(a),
          success: function (data) {
            if (data.success) {
              //关闭模态框
              roleDialog.dialog('close');
              //给出成功提示
              $.messager.alert("提示", "保存成功", "info");
              //刷新数据表格
              roleDatagrid.datagrid('reload');
            } else {
              //失败给出提示
              $.messager.alert("提示", "保存失败", "错误：" + data.errorCode + "    " + data.message);
            }
          }
        }
      );
// $(roleDialogForm).form('submit', {
//   url: 'role/save',
//   onSubmit: function (param) {
//     //获取表格中所有行
//     var rowDatas = appendRowDatagrid.datagrid("getRows");
//     //console.debug(rowDatas);
//     // 从表格中，取出每行数据,遍历取得ID
//
//     for (var i = 0; i < rowDatas.length; i++) {
//       var rowData = rowDatas[i];
//       console.debug(rowData);
//       console.debug(rowData.id);
//       // 拼接成指定提交格式 =》permissions  [0].id =1;
//       //param['permissions[' + i + ']'] = rowData;
//       param['permissions[' + i + ']'] = rowData;
//     }
//     return roleDialogForm.form("validate");
//   },
//   success: function (data) {
//     var result = $.parseJSON(data);
//     if (result.success) {
//       //关闭模态框
//       roleDialog.dialog('close');
//       //给出成功提示
//       $.messager.alert("提示", "保存成功", "info");
//       //刷新数据表格
//       roleDatagrid.datagrid('reload');
//     } else {
//       //失败给出提示
//       $.messager.alert("提示", "保存失败", "错误：" + result.errorCode + "    " + result.message);
//     }
//   }
// });

    },
    roleCancel: function () {
      roleDialog.dialog('close');
    }
    ,
  };
  //4 初始化组件
  //4.1初始化数据表格
  permissionDatagrid.datagrid({
    // title:'',
    url: 'permission/page',
    pagination: true,
    rownumbers: true,
    singleSelect: true,
    fit: true,
    fitColumns: true,//列宽度
    columns: [[
      {field: 'id', title: '编号', width: 100, hidden: true},
      {field: 'sn', title: '标识', width: 100},
      {field: 'name', title: '权限名称', width: 100},
      {field: 'resource', title: 'resource', width: 100},
      {field: 'state', title: '状态', width: 100, formatter: permissionStateFormatter},
    ]],
    toolbar: '#permissionDatagridToolbar'
  });
  //4.2初始化添加修改模态框
  permissionDialog.dialog({
    width: 400,
    height: 300,
    closed: true,
    modal: false
    , buttons: '#permissionDialogToolbar'
  });
  //4.3
  searchAdvanceDialog.dialog({
    width: 400,
    height: 300,
    closed: true,
    modal: false,
    buttons: '#searchAdvanceDialogToolbar'
  });
  //4.1.1初始化数据表格
  roleDatagrid.datagrid({
    // title: '',
    url: 'role/page',
    pagination: true,
    rownumbers: true,
    singleSelect: true,
    fit: true,
    fitColumns: true,//列宽度
    columns: [[
      {field: 'id', title: '编号', width: 100, hidden: true},
      {field: 'name', title: '角色名称', width: 100},
    ]],
    toolbar: '#roleDatagridToolbar',
    onClickRow: function (index, row) {
      console.debug(row);
      //重新加载右侧的权限列表，显示左边选择的角色的权限
      permissionDatagrid.datagrid('loadData',{total:0,rows:[]});
      permissionDatagrid.datagrid('load',{"role_id":row.id})
    }
  });
//4.1.2 初始化权限展示列表
  showPermissionDatagrid.datagrid({
    url: 'permission/page',
    pagination: true,
    rownumbers: true,
    singleSelect: true,
    // fit: true,
    height: 250,
    width: 300,
    fitColumns: true,//列宽度
    columns: [[
      {field: 'id', title: '编号', width: 100, hidden: true},
      {field: 'name', title: '所有权限', width: 100},
    ]],
    onDblClickRow: function (index, row) {
      // console.debug(index);
      // console.debug(row);
      var rows = appendRowDatagrid.datagrid("getRows");
      //遍历与右侧选中行的id进行比较
      for (var i in rows) {
        if (rows[i].id == row.id) {
          $.messager.alert("温馨提示", "不能重复选择权限", "info");
          return;
        }
      }
      appendRowDatagrid.datagrid('appendRow', row);
      //paramList.push(index);
    }
  });

  // var pager = showPermissionDatagrid.datagrid("getPager");
  // pager.pagination({
  //   showPageList:false,
  //   showRefresh:false,
  //   diaplayMsg:""
  //   });
//4.1.3初始化追加数据的表格
  appendRowDatagrid.datagrid({
    pagination: true,
    rownumbers: true,
    singleSelect: true,
    // fit:true,
    height: 250,
    width: 300,
    fitColumns: true,//列宽度
    columns: [[
      {field: 'id', title: '编号', width: 100, hidden: true},
      {field: 'name', title: '已选权限', width: 100},
    ]],
    onDblClickRow: function (index, row) {
      // console.debug(index);
      // console.debug(row);
      appendRowDatagrid.datagrid("deleteRow", index);
    }
  });
//4.2初始化添加修改模态框
  roleDialog.dialog({
    width: 700,
    height: 400,
    closed: true,
    modal: false,
    center: true,
    buttons: '#roleDialogToolbar'
  });
  //5 为页面所有的标签添加点击事件
  $("a").on("click", function () {
    //获取标签的data-cmd的属性值
    //对属性值进行判断
    var cmd = $(this).data('cmd');
    if (cmd) {
      cmdObj_2[cmd + ""]();
    }

  })
});
